home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / Params / PADnoteParameters.h < prev    next >
C/C++ Source or Header  |  2005-03-14  |  5KB  |  169 lines

  1. /*
  2.   ZynAddSubFX - a software synthesizer
  3.  
  4.   PADnoteParameters.h - Parameters for PADnote (PADsynth)  
  5.   Copyright (C) 2002-2005 Nasca Octavian Paul
  6.   Author: Nasca Octavian Paul
  7.  
  8.   This program is free software; you can redistribute it and/or modify
  9.   it under the terms of version 2 of the GNU General Public License 
  10.   as published by the Free Software Foundation.
  11.  
  12.   This program is distributed in the hope that it will be useful,
  13.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.   GNU General Public License (version 2) for more details.
  16.  
  17.   You should have received a copy of the GNU General Public License (version 2)
  18.   along with this program; if not, write to the Free Software Foundation,
  19.   Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  20.  
  21. */
  22.  
  23. #ifndef PAD_NOTE_PARAMETERS_H
  24. #define PAD_NOTE_PARAMETERS_H
  25.  
  26. #include "../Misc/XMLwrapper.h"
  27. #include "../DSP/FFTwrapper.h"
  28. #include "../globals.h"
  29. #include "../Synth/OscilGen.h"
  30. #include "../Synth/Resonance.h"
  31. #include "../Misc/Util.h"
  32.  
  33. #include "EnvelopeParams.h"
  34. #include "LFOParams.h"
  35. #include "FilterParams.h"
  36. #include "Presets.h"
  37.  
  38.  
  39. class PADnoteParameters:public Presets{
  40.     public:
  41.     PADnoteParameters(FFTwrapper *fft_,pthread_mutex_t *mutex_);
  42.     ~PADnoteParameters();
  43.     
  44.     void defaults();
  45.     void add2XML(XMLwrapper *xml);
  46.         void getfromXML(XMLwrapper *xml);
  47.     
  48.     //returns a value between 0.0-1.0 that represents the estimation perceived bandwidth
  49.     REALTYPE getprofile(REALTYPE *smp,int size);
  50.     
  51.     //parameters
  52.     
  53.     //the mode: 0 - bandwidth, 1 - discrete (bandwidth=0), 2 - continous
  54.     //the harmonic profile is used only on mode 0
  55.     unsigned char Pmode;
  56.     
  57.     //Harmonic profile (the frequency distribution of a single harmonic)
  58.     struct {
  59.         struct{//base function 
  60.         unsigned char type;
  61.         unsigned char par1;
  62.         }base;
  63.         unsigned char freqmult;//frequency multiplier of the distribution
  64.         struct{//the modulator of the distribution 
  65.         unsigned char par1;
  66.         unsigned char freq;
  67.         }modulator;
  68.         
  69.         unsigned char width;//the width of the resulting function after the modulation
  70.         struct{//the amplitude multiplier of the harmonic profile
  71.         unsigned char mode;
  72.         unsigned char type;
  73.         unsigned char par1;
  74.         unsigned char par2;
  75.         }amp;
  76.         bool autoscale;//if the scale of the harmonic profile is computed automaticaly
  77.         unsigned char onehalf;//what part of the base function is used to make the distribution
  78.     }Php;
  79.  
  80.     
  81.     unsigned int Pbandwidth;//the values are from 0 to 1000 
  82.     unsigned char Pbwscale;//how the bandwidth is increased according to the harmonic's frequency
  83.     
  84.     struct{//where are positioned the harmonics (on integer multimplier or different places)
  85.         unsigned char type;
  86.         unsigned char par1,par2,par3;//0..255
  87.     }Phrpos;
  88.  
  89.     struct {//quality of the samples (how many samples, the length of them,etc.)
  90.         unsigned char samplesize;
  91.         unsigned char basenote,oct,smpoct;
  92.     } Pquality;
  93.     
  94.     //frequency parameters
  95.     //If the base frequency is fixed to 440 Hz
  96.     unsigned char Pfixedfreq;
  97.  
  98.     /* Equal temperate (this is used only if the Pfixedfreq is enabled)
  99.        If this parameter is 0, the frequency is fixed (to 440 Hz);
  100.        if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
  101.     unsigned char PfixedfreqET;
  102.     unsigned short int PDetune;//fine detune
  103.     unsigned short int PCoarseDetune;//coarse detune+octave
  104.     unsigned char PDetuneType;//detune type
  105.  
  106.     EnvelopeParams *FreqEnvelope; //Frequency Envelope
  107.         LFOParams *FreqLfo;//Frequency LFO
  108.  
  109.     //Amplitude parameters
  110.     unsigned char PStereo;
  111.     /* Panning -  0 - random 
  112.               1 - left
  113.              64 - center
  114.             127 - right */
  115.     unsigned char PPanning;
  116.  
  117.     unsigned char PVolume;
  118.  
  119.     unsigned char PAmpVelocityScaleFunction;
  120.  
  121.     EnvelopeParams *AmpEnvelope;
  122.    
  123.     LFOParams *AmpLfo;   
  124.  
  125.     unsigned char PPunchStrength,PPunchTime,PPunchStretch,PPunchVelocitySensing;
  126.  
  127.     //Filter Parameters
  128.     FilterParams *GlobalFilter;
  129.  
  130.     // filter velocity sensing
  131.     unsigned char PFilterVelocityScale; 
  132.  
  133.     // filter velocity sensing
  134.     unsigned char PFilterVelocityScaleFunction;
  135.     
  136.     EnvelopeParams *FilterEnvelope;
  137.     LFOParams *FilterLfo;
  138.     
  139.  
  140.  
  141.     
  142.     REALTYPE setPbandwidth(int Pbandwidth);//returns the BandWidth in cents
  143.     REALTYPE getNhr(int n);//gets the n-th overtone position relatively to N harmonic
  144.  
  145.     void applyparameters(bool lockmutex);
  146.  
  147.     OscilGen *oscilgen;
  148.     Resonance *resonance;
  149.     
  150.     struct{
  151.         int size;
  152.         REALTYPE basefreq;
  153.         REALTYPE *smp;
  154.     }sample[PAD_MAX_SAMPLES],newsample;
  155.     
  156.     private:
  157.     void generatespectrum_bandwidthMode(REALTYPE *spectrum, int size,REALTYPE basefreq,REALTYPE *profile,int profilesize,REALTYPE bwadjust);
  158.     void generatespectrum_otherModes(REALTYPE *spectrum, int size,REALTYPE basefreq,REALTYPE *profile,int profilesize,REALTYPE bwadjust);
  159.     void deletesamples();
  160.     void deletesample(int n);
  161.     
  162.     FFTwrapper *fft;
  163.     pthread_mutex_t *mutex;
  164. };
  165.  
  166.  
  167.  
  168. #endif
  169.